Skip to main content
GET
/
menus
/
products
/
{id}
Get product
curl --request GET \
  --url https://api.example.com/menus/products/{id}
{
  "data": {
    "id": "burger-classic",
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Classic burger",
    "description": "Angus beef patty with lettuce and tomato.",
    "image_url": "https://cdn.example.com/burger-classic.jpg",
    "channels": {
      "APP": {
        "id": "app",
        "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "name": "Mobile app",
        "stores": {
          "downtown": {
            "id": "downtown",
            "uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
            "name": "Downtown",
            "fulfillment": {
              "DELIVERY": {
                "uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
                "id": "delivery",
                "type": "DELIVERY",
                "name": "Delivery",
                "pricing": {
                  "minimum_quantity": 1,
                  "maximum_quantity": 10
                },
                "availability": {
                  "status": "AVAILABLE",
                  "schedules": [{
                    "monday": { "start_time": "11:00:00", "end_time": "22:00:00" }
                  }],
                  "out_of_stock_until": null
                }
              }
            }
          }
        }
      }
    },
    "cms_template_id": null,
    "cms": null,
    "status": "ACTIVE"
  }
}
Returns a single product from the active menu, including localized name and description, image, and per-channel pricing and availability. Use this endpoint for product detail pages or to hydrate cart line items.
Requires a Fire spark access token obtained through token exchange.

Path parameters

ParameterDescription
idExternal product identifier. Alphanumeric characters, _, and - only. 1–64 characters.

Query parameters

ParameterRequiredDescription
store_idYesExternal store identifier.
channel_idYesExternal channel identifier.
fulfillment_idYesExternal fulfillment identifier.

Request

curl "https://firespark.vercel.app/api/storefront/v1/menus/products/burger-classic?store_id=downtown&channel_id=app&fulfillment_id=delivery" \
  -H "Authorization: Bearer ACCESS_TOKEN"

Response

{
  "data": {
    "id": "burger-classic",
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Classic burger",
    "description": "Angus beef patty with lettuce and tomato.",
    "image_url": "https://cdn.example.com/burger-classic.jpg",
    "channels": {
      "APP": {
        "id": "app",
        "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "name": "Mobile app",
        "stores": {
          "downtown": {
            "id": "downtown",
            "uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
            "name": "Downtown",
            "fulfillment": {
              "DELIVERY": {
                "uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
                "id": "delivery",
                "type": "DELIVERY",
                "name": "Delivery",
                "pricing": {
                  "minimum_quantity": 1,
                  "maximum_quantity": 10
                },
                "availability": {
                  "status": "AVAILABLE",
                  "schedules": [{
                    "monday": { "start_time": "11:00:00", "end_time": "22:00:00" }
                  }],
                  "out_of_stock_until": null
                }
              }
            }
          }
        }
      }
    },
    "cms_template_id": null,
    "cms": null,
    "status": "ACTIVE"
  }
}

Product object

FieldTypeDescription
idstringExternal product identifier.
uidstring (UUID)Fire spark internal identifier.
namestringDisplay name. 1–100 characters.
descriptionstringOptional description. Up to 500 characters. null when omitted.
image_urlstringProduct image URL.
channelsobjectPer-channel, per-store, per-fulfillment pricing and availability.
cms_template_idstring (UUID)CMS template linked to this product. null when no template is assigned.
cmsobjectRead-only. Resolved CMS template when assigned.
statusstringACTIVE or INACTIVE.
Map of channel codes. Each entry contains id, uid, name, and a stores map.Each store contains id, uid, name, and a fulfillment map keyed by fulfillment type code.Each fulfillment entry requires uid, id, type, name, pricing, and availability.
FieldTypeDescription
minimum_quantitynumberMinimum units per order. ≥ 0.
maximum_quantitynumberMaximum units per order. 0–1,000,000.
FieldTypeDescription
statusstringAVAILABLE, UNAVAILABLE, or OUT_OF_STOCK.
schedulesarray | nullWeekly hour maps keyed by day name (monday through sunday). null when there is no schedule restriction.
out_of_stock_untilstringOptional ISO 8601 datetime when the product returns to stock.

Error responses

StatusDescription
401Missing or invalid access token.
403Token does not have access to this product.
404Product not found in the active menu for this context.